import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 *
 * @author Alejandro Figueroa
 */
public class lecturaXML {

    List petroleoEntradas;
    Document dom;

    public lecturaXML(){
        //Se crea una lista para meter las entradas de petroleo
        petroleoEntradas = new ArrayList();
    }

    public void lecturaXmlFile(String dirArchivoXml){

        //get the factory
	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

	try{

            //Using factory get an instance of document builder
            DocumentBuilder db = dbf.newDocumentBuilder();

            //parse using builder to get DOM representation of the XML file
            dom = db.parse(dirArchivoXml);


	}catch(ParserConfigurationException pce){
            pce.printStackTrace();
            System.out.println("Error con la configuracion del archivo XML");

	}catch(SAXException se){
            se.printStackTrace();
            System.out.println("Error con SAX");

	}catch(IOException ioe){
            ioe.printStackTrace();
            System.out.println("Error IOE");

	}
    }

    /**
     * Metodo que realiza la lectura del cocumento con la direccion del xml
     * que ya fue colocada en el dom
     * @return: una lista de tipo XmlTanque con los elementos leidos del xml
     */
    public List lecturaDocumento(){

        //obtengo el elemento raiz (Tanque)
	Element docEle = dom.getDocumentElement();

	//obtengo una lista de nodos de elementos tanque
	NodeList listaItem = docEle.getElementsByTagName("id");
        NodeList listaItem2 = docEle.getElementsByTagName("lts");

        if(listaItem != null && listaItem.getLength() > 0) {

            for(int i = 0 ; i < listaItem.getLength();i++) {

		//obtengo los elementos
		Element item = (Element)listaItem.item(i);
                Element item2 = (Element)listaItem2.item(i);


                XmlTanque e = getValor2(item,item2);

		//agregamos a la lista
		petroleoEntradas.add(e);
            }

	}

        return petroleoEntradas;

    }

    /**
     * Metodo que devuelve el valor contenido en los elementos del xml que estamos
     * leyendo
     * @param eleId: elemento id del xml
     * @param eleLts: elemento litros del xml
     * @return: un objeto con los datos ya convertiodos del xml
     */
    private XmlTanque getValor2(Element eleId, Element eleLts) {

        int valorId = 0;
        int valorLts = 0;

            valorId = Integer.parseInt(eleId.getFirstChild().getNodeValue());
            valorLts = Integer.parseInt(eleLts.getFirstChild().getNodeValue());

	    XmlTanque e = new XmlTanque(valorId,valorLts);

	return e;

    }

    /**
     * Metodo encargado de correr la funcion de lectura de xml
     * @param dirArchivoXml: direccion del archivo xml
     * @return: una lista con los componentes del archivo xml
     */
    public List runLectura(String dirArchivoXml) {

	lecturaXmlFile(dirArchivoXml);

	return lecturaDocumento();

    }

}